﻿using System;
using System.Globalization;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using SGAEntidades;
using SGALogicaNegocio;

namespace webSGA.Util
{
    public class Util
    {
        public static void CargarDepartamentos(DropDownList cboDepartamento, Boolean bInsertarSeleccion)
        {
            cboDepartamento.DataSource = new Ubigeo().Listar(new UbigeoInfo(null, "00", "00", null));
            cboDepartamento.DataValueField = "IdDepartamento";
            cboDepartamento.DataTextField = "Descripcion";
            cboDepartamento.DataBind();
            if (bInsertarSeleccion)
                cboDepartamento.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboDepartamento.SelectedIndex = -1;
        }

        public static void CargarProvincias(DropDownList cboDepartamento, DropDownList cboProvincia,
                                            DropDownList cboDistrito, Boolean bInsertarSeleccion)
        {
            if (cboDepartamento.Items.Count > 1)
            {
                String sDepartamento = cboDepartamento.SelectedValue;
                if (!sDepartamento.Equals("-1"))
                {
                    cboProvincia.DataSource = new Ubigeo().Listar(new UbigeoInfo(sDepartamento, null, "00", null));
                    cboProvincia.DataValueField = "IdProvincia";
                    cboProvincia.DataTextField = "Descripcion";
                    cboProvincia.DataBind();
                    cboProvincia.Items.RemoveAt(0);
                    if (bInsertarSeleccion)
                        cboProvincia.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
                    cboProvincia.SelectedIndex = -1;
                    if (cboDistrito != null)
                        cboDistrito.Items.Clear();
                }
                else
                {
                    cboProvincia.Items.Clear();
                    if (cboDistrito != null)
                        cboDistrito.Items.Clear();
                }
            }
        }

        public static void CargarDistritos(DropDownList cboDepartamento, DropDownList cboProvincia,
                                           DropDownList cboDistrito, Boolean bInsertarSeleccion)
        {
            if (cboProvincia.Items.Count > 1)
            {
                String sDepartamento = cboDepartamento.SelectedValue;
                String sProvincia = cboProvincia.SelectedValue;

                if (!sProvincia.Equals("-1"))
                {
                    cboDistrito.DataSource =
                        new Ubigeo().Listar(new UbigeoInfo(sDepartamento, sProvincia, null, null));
                    cboDistrito.DataValueField = "IdDistrito";
                    cboDistrito.DataTextField = "Descripcion";
                    cboDistrito.DataBind();
                    cboDistrito.Items.RemoveAt(0);
                    if (bInsertarSeleccion)
                        cboDistrito.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
                    cboDistrito.SelectedIndex = -1;
                }
                else
                {
                    cboDistrito.Items.Clear();
                }
            }
        }

        public static void CargarTipoLocal(DropDownList cboTipoLocal, Boolean bInsertarSeleccion)
        {
            cboTipoLocal.DataSource = new TipoLocal().Listar(new TipoLocalInfo());
            cboTipoLocal.DataValueField = "IdTipoLocal";
            cboTipoLocal.DataTextField = "Descripcion";
            cboTipoLocal.DataBind();
            if (bInsertarSeleccion)
                cboTipoLocal.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboTipoLocal.SelectedIndex = -1;
        }

        public static void CargarTipoBienAsegurado(DropDownList cboTipoBienAsegurado, Boolean bInsertarSeleccion)
        {
            cboTipoBienAsegurado.DataSource = new TipoBienAsegurado().Listar(new TipoBienAseguradoInfo());
            cboTipoBienAsegurado.DataValueField = "IdTipoBienAsegurado";
            cboTipoBienAsegurado.DataTextField = "Descripcion";
            cboTipoBienAsegurado.DataBind();
            if (bInsertarSeleccion)
                cboTipoBienAsegurado.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboTipoBienAsegurado.SelectedIndex = -1;
        }

        public static void CargarTipoPropiedad(DropDownList cboTipoPropiedad, Boolean bInsertarSeleccion)
        {
            cboTipoPropiedad.DataSource = new TipoPropiedad().Listar(new TipoPropiedadInfo());
            cboTipoPropiedad.DataValueField = "IdTipoPropiedad";
            cboTipoPropiedad.DataTextField = "Descripcion";
            cboTipoPropiedad.DataBind();
            if (bInsertarSeleccion)
                cboTipoPropiedad.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboTipoPropiedad.SelectedIndex = -1;
        }

        public static void CargarEstadoLocal(DropDownList cboEstadoLocal, Boolean bInsertarSeleccion)
        {
            cboEstadoLocal.DataSource = new EstadoLocal().Listar(new EstadoLocalInfo());
            cboEstadoLocal.DataValueField = "IdEstadoLocal";
            cboEstadoLocal.DataTextField = "Descripcion";
            cboEstadoLocal.DataBind();
            if (bInsertarSeleccion)
                cboEstadoLocal.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboEstadoLocal.SelectedIndex = -1;
        }

        public static void CargarTipoContacto(DropDownList cboTipoContacto, Boolean bInsertarSeleccion)
        {
            cboTipoContacto.DataSource = new TipoContacto().Listar(new TipoContactoInfo());
            cboTipoContacto.DataValueField = "IdTipoContacto";
            cboTipoContacto.DataTextField = "Descripcion";
            cboTipoContacto.DataBind();
            if (bInsertarSeleccion)
                cboTipoContacto.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboTipoContacto.SelectedIndex = -1;
        }

        public static void CargarEstadoSolicitud(DropDownList cboEstadoSolicitud, Boolean bInsertarSeleccion)
        {
            cboEstadoSolicitud.DataSource = new EstadoSolicitud().Listar(new EstadoSolicitudInfo());
            cboEstadoSolicitud.DataValueField = "IdEstadoSolicitud";
            cboEstadoSolicitud.DataTextField = "Descripcion";
            cboEstadoSolicitud.DataBind();
            if (bInsertarSeleccion)
                cboEstadoSolicitud.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboEstadoSolicitud.SelectedIndex = -1;
        }

        public static void CargarTipoCombustible(DropDownList cboTipoCombustible, Boolean bInsertarSeleccion)
        {
            cboTipoCombustible.DataSource = new TipoCombustible().ListarTipoComsbutible(new TipoCombustibleInfo());
            cboTipoCombustible.DataValueField = "IdTipoCombustible";
            cboTipoCombustible.DataTextField = "Descripcion";
            cboTipoCombustible.DataBind();
            if (bInsertarSeleccion)
                cboTipoCombustible.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboTipoCombustible.SelectedIndex = -1;
        }

        public static void CargarMotivoSolicitudTelefonia(DropDownList cboMotivoSolicitudTelefonia, Boolean bInsertarSeleccion)
        {
            cboMotivoSolicitudTelefonia.DataSource = new MotivoSolicitudTelefono().Listar(new MotivoSolicitudTelefonoInfo());
            cboMotivoSolicitudTelefonia.DataValueField = "IdMotivoSolicitud";
            cboMotivoSolicitudTelefonia.DataTextField = "Descripcion";
            cboMotivoSolicitudTelefonia.DataBind();
            if (bInsertarSeleccion)
                cboMotivoSolicitudTelefonia.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboMotivoSolicitudTelefonia.SelectedIndex = -1;
        }

        public static void CargarTipoTelefono(DropDownList cboTipoTelefono, Boolean bInsertarSeleccion)
        {
            cboTipoTelefono.DataSource = new TipoTelefono().Listar(new TipoTelefonoInfo());
            cboTipoTelefono.DataValueField = "IdTipoTelefono";
            cboTipoTelefono.DataTextField = "Descripcion";
            cboTipoTelefono.DataBind();
            if (bInsertarSeleccion)
                cboTipoTelefono.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboTipoTelefono.SelectedIndex = -1;
        }

        public static void CargarTipoServicio(DropDownList cboTipoServicio, Boolean bInsertarSeleccion)
        {
            cboTipoServicio.DataSource = new TipoServicio().Listar(new TipoServicioInfo());
            cboTipoServicio.DataValueField = "IdTipoServicio";
            cboTipoServicio.DataTextField = "Descripcion";
            cboTipoServicio.DataBind();
            if (bInsertarSeleccion)
                cboTipoServicio.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboTipoServicio.SelectedIndex = -1;
        }

        public static void CargarMoneda(DropDownList cboMoneda, Boolean bInsertarSeleccion)
        {
            cboMoneda.DataSource = new Moneda().Listar(new MonedaInfo());
            cboMoneda.DataValueField = "IdMoneda";
            cboMoneda.DataTextField = "Descripcion";
            cboMoneda.DataBind();
            if (bInsertarSeleccion)
                cboMoneda.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboMoneda.SelectedIndex = -1;
        }

        public static void CargarProveedor(DropDownList cboProveedor, Boolean bInsertarSeleccion)
        {
            cboProveedor.DataSource = new Proveedor().Listar(new ProveedorInfo());
            cboProveedor.DataValueField = "RucProveedor";
            cboProveedor.DataTextField = "RazonSocial";
            cboProveedor.DataBind();
            if (bInsertarSeleccion)
                cboProveedor.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboProveedor.SelectedIndex = -1;
        }

        public static void CargarOperadorTelefonia(DropDownList cboOperador, Boolean bInsertarSeleccion)
        {
            cboOperador.DataSource = new OperadorTelefonia().Listar(new OperadorTelefoniaInfo());
            cboOperador.DataValueField = "IdOperador";
            cboOperador.DataTextField = "Descripcion";
            cboOperador.DataBind();
            if (bInsertarSeleccion)
                cboOperador.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboOperador.SelectedIndex = -1;
        }

        public static void CargarPlanTelefonia(DropDownList cboPlanTelefonia, DropDownList cboOperador, Boolean bInsertarSeleccion)
        {
            if (cboOperador.Items.Count > 1)
            {
                String sOperador = cboOperador.SelectedValue;
                if (!sOperador.Equals("-1"))
                {
                    cboPlanTelefonia.DataSource = new OperadorPlanTelefonia().Listar(new OperadorPlanTelefoniaInfo(null, sOperador, null));
                    cboPlanTelefonia.DataValueField = "IdPlanTelefonia";
                    cboPlanTelefonia.DataTextField = "Descripcion";
                    cboPlanTelefonia.DataBind();
                    if (bInsertarSeleccion)
                        cboPlanTelefonia.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
                    cboPlanTelefonia.SelectedIndex = -1;
                }
                else
                {
                    cboPlanTelefonia.DataSource = null;
                }
            }
        }

        public static void CargarCarroceriaVehiculo(DropDownList cboCarroceria, Boolean bInsertarSeleccion)
        {
            cboCarroceria.DataSource = new TipoCarroceria().Listar(new TipoCarroceriaInfo());
            cboCarroceria.DataValueField = "IdTipoCarroceria";
            cboCarroceria.DataTextField = "Descripcion";
            cboCarroceria.DataBind();
            if (bInsertarSeleccion)
                cboCarroceria.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboCarroceria.SelectedIndex = -1;
        }

        public static void CargarTipoSeguro(DropDownList cboTipoSeguro, Boolean bInsertarSeleccion)
        {
            cboTipoSeguro.DataSource = new TipoSeguro().Listar(new TipoSeguroInfo());
            cboTipoSeguro.DataValueField = "IdTipoSeguro";
            cboTipoSeguro.DataTextField = "Descripcion";
            cboTipoSeguro.DataBind();
            if (bInsertarSeleccion)
                cboTipoSeguro.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboTipoSeguro.SelectedIndex = -1;
        }

        public static void CargarMotivoViajeTaxi(DropDownList cboMotivoViajeTaxi, Boolean bInsertarSeleccion)
        {
            cboMotivoViajeTaxi.DataSource = new MotivoViajeTaxi().Listar(new MotivoViajeTaxiInfo());
            cboMotivoViajeTaxi.DataValueField = "IdMotivo";
            cboMotivoViajeTaxi.DataTextField = "Descripcion";
            cboMotivoViajeTaxi.DataBind();
            if (bInsertarSeleccion)
                cboMotivoViajeTaxi.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboMotivoViajeTaxi.SelectedIndex = -1;
        }

        public static void CargarMarcaVehiculo(DropDownList cboMarcaVehiculo, Boolean bInsertarSeleccion)
        {
            cboMarcaVehiculo.DataSource = new MarcaVehiculo().Listar(new MarcaVehiculoInfo());
            cboMarcaVehiculo.DataValueField = "IdMarca";
            cboMarcaVehiculo.DataTextField = "Descripcion";
            cboMarcaVehiculo.DataBind();
            if (bInsertarSeleccion)
                cboMarcaVehiculo.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
            cboMarcaVehiculo.SelectedIndex = -1;
        }

        public static void CargarModeloVehiculo(DropDownList cboModeloVehiculo, DropDownList cboMarcaVehiculo,
                                                Boolean bInsertarSeleccion)
        {
            if (cboMarcaVehiculo.Items.Count > 1)
            {
                String sMarca = cboMarcaVehiculo.SelectedValue;
                if (!sMarca.Equals("-1"))
                {
                    cboModeloVehiculo.DataSource =
                        new ModeloVehiculo().Listar(new ModeloVehiculoInfo(null, sMarca, null));
                    cboModeloVehiculo.DataValueField = "IdModelo";
                    cboModeloVehiculo.DataTextField = "Descripcion";
                    cboModeloVehiculo.DataBind();
                    if (bInsertarSeleccion)
                        cboModeloVehiculo.Items.Insert(0, new ListItem("--SELECCIONE--", "-1"));
                    cboModeloVehiculo.SelectedIndex = -1;
                }
                else
                    cboModeloVehiculo.DataSource = null;
            }
        }

        public static void CargarHoras(DropDownList cboHoras, DropDownList cboMinutos)
        {
            for (var i=0; i <= 23; i++)
            {
                var sHora = i.ToString(CultureInfo.InvariantCulture);
                cboHoras.Items.Insert(i, new ListItem(sHora.PadLeft(2, '0'), sHora.PadLeft(2, '0')));
            }

            for (var j = 0; j <= 59; j++)
            {
                var sMinutos = j.ToString(CultureInfo.InvariantCulture);
                cboMinutos.Items.Insert(j, new ListItem(sMinutos.PadLeft(2, '0'), sMinutos.PadLeft(2, '0')));
            }
        }

        public static void AlternarMensaje(Boolean bEstado, String sMensaje, HtmlGenericControl divError, HtmlGenericControl divExito, Label lblError, Label lblExito)
        {
            if (bEstado)
            {
                divError.Visible = false;
                lblError.Text = String.Empty;
                if (divExito != null)
                {
                    divExito.Visible = true;
                    lblExito.Text = sMensaje;
                }
            }
            else
            {
                divError.Visible = true;
                lblError.Text = sMensaje;
                if (divExito != null)
                {
                    divExito.Visible = false;
                    lblExito.Text = string.Empty;
                }
            }
        }

        public static Boolean EsFechaValida(string sFecha)
        {
            //string strRegex = @"((^(10|12|0?[13578])([/])(3[01]|[12][0-9]|0?[1-9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(11|0?[469])([/])(30|[12][0-9]|0?[1-9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(0?2)([/])(2[0-8]|1[0-9]|0?[1- 9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(0?2)([/])(29)([/])([2468][048]00)$)|(^(0?2)([/])(29)([/])([3579][26]00)$)|(^(0?2)([/])(29)([/])([1][89][0][48])$)|(^(0?2)([/])(29)([/])([2-9][0-9][0][48])$)|(^(0?2)([/])(29)([/])([1][89][2468][048])$)|(^(0?2)([/])(29)([/])([2-9][0-9][2468][048])$)|(^(0?2)([/])(29)([/])([1][89][13579][26])$)|(^(0?2)([/])(29)([/])([2-9][0-9][13579][26])$))";
            //MMDDYYYY
            //([1-9]|1[012])[- /.]([1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d
            //DDMMYYYY
            const string strRegex = @"(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d";
            return new System.Text.RegularExpressions.Regex(strRegex).IsMatch(sFecha);
        }

        public static Boolean EsNumerico(string sValor)
        {
            const string strRegex = @"^[+-]?\d+\.?\d*$";
            return System.Text.RegularExpressions.Regex.IsMatch(sValor, strRegex);
        }

        public static bool EsEnteroPositivo(string sValor)
        {
            const string strRegex = "[^0-9]";
            return !System.Text.RegularExpressions.Regex.IsMatch(sValor, strRegex);
        }

        public static Boolean EsHoraValida(string sHora)
        {
            //string strRegex = @"([01]?[0-9]|2[0-3]):[0-5][0-9]";
            const string strRegex = @"^([0-1]?\d|2[0-3]):([0-5]\d)$";
            return System.Text.RegularExpressions.Regex.IsMatch(sHora, strRegex);
        }

        public static DateTime? HoraMinima(DateTime? dFecha)
        {
            if (dFecha != null)
                return new DateTime(dFecha.Value.Year, dFecha.Value.Month, dFecha.Value.Day, 0, 0, 0);
            return null;
        }

        public static DateTime? HoraMaxima(DateTime? dFecha)
        {
            if (dFecha != null)
                return new DateTime(dFecha.Value.Year, dFecha.Value.Month, dFecha.Value.Day, 23, 59, 59);
            return null;
        }
    }
}